Skip to main content

mysql 2038 千年虫问题

问题原因

MySQL timestamp 支持的最大时间范围是 ‘1970-01-01 00:00:01.000000’ 到 ‘2038-01-19 03:14:07.999999’,在源码 sql/sql_parse.cc 的 dispatch_command() 函数里,有一段代码,检测当前时间是否超过2038年,如果超过,则会立即停止 MySQL。

从以上这两段注释来看,应该是 MySQL 内部变量 my_time_t 不支持 64 位,在到达2038年之后,
MySQL 无法执行任何命令,直接关闭。

影响范围

目前 5.7 以及 8.0 的最新版本,都包含这一段代码逻辑,也就是现有的版本都会受到影响,在2038年都会自动停止。

  • 5.7.34(当前 5.7 的最新版本)
  • 8.0.25(当前 8.0 的最新版本)

解决方案

期待 MySQL 官方后续尽快开发完全支持 my_time_t 64位的版本,在2038年之前升级到该版本即可。

今天是2021.06.22,距离2038还有17年,目前所有在用的 MySQL 版本在2038年到来前,都需要进行升级。